先前有提過在取得用戶資訊前,我們需要先取得其access_token。
今天要認識的liff.getProfile(),其實與[Day 13] LIFF GetAccessToken有關。
繼續看下去吧!Go!
取得用戶的userId、暱稱、大頭貼URL和個性簽名。
實際上,liff.getProfile()是透過HTTP GET對https://api.line.me/v2/profile
發送請求。
在請求的header中,須包含access_token。
所以執行此方法前,用戶須先登入。因為登入之後,才會有access_token。
如果請求發送成功的話,會回傳一個物件:
{
"userId":"U4af4980629...", // 用戶的userId
"displayName":"Brown", // 用戶的暱稱
"pictureUrl":"https://profile.line-scdn.net/abcdefghijklmn", // 用戶的大頭貼
"statusMessage":"Hello, LINE!" // 用戶的個性簽名
}
記得在玩Messaging API的時候,一直看到userId,滿頭問號的想這到底是什麼。
後來找到這篇,它的說明是這樣的:
每一個LINE用戶帳號都有一個專屬的內部識別碼,稱為User ID。User ID與LINE用戶自訂的LINE ID的格式與用途完全不同。 開發Messaging API應用程式時,無論是接受訊息、傳送訊息、或是存取其他API,皆必須使用User ID來代表LINE用戶。
User ID的特色就是每一個LINE用戶在每一個公司/組織的LINE平台開發帳號都有該公司/組織專屬的識別碼,也就是相同公司/組織下的每個Messaging API帳號聯繫相同的LINE用戶會使用一樣的User ID,而不同公司/組織的Messaging API帳號聯繫相同的LINE用戶就必須使用各自不同的User ID。如此確保每一個公司/組織都無法取得或使用其他公司/組織專屬的User ID,保障公司/組織與LINE用戶的隱私安全。
很長一段文字,看完可能還似懂非懂,不如搭配一張圖:
liff.init({
liffId: '後台取得的LIFF ID'
}) .then(() => {
if (!liff.isLoggedIn()) {
alert("用戶未登入");
liff.login();
} else {
alert("用戶已登入");
liff.getProfile()
.then(profile => {
const name = profile.displayName
})
.catch((err) => {
console.log('error', err);
});
}
}
}).catch((err) => {
console.log('初始化失敗')
});